package com.atguigu.advice;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;

/**
 * @版本： V5.1.0
 * @版权： Copyright @ 2025 广东广昱信息科技有限公司版权所有
 * @作者： 广东广昱信息科技有限公司
 * @日期： 2025-06-16 22:14
 */
public class TxAroundAdvice {

    /**
     * 环绕通知,需要你在通知中,定义目标方法的执行
     *
     *
     * @param joinPoint 目标方法(获取目标方法信息,多了要给执行方法)
     * @return 目标方法的返回值
     * @throws Throwable
     */
    @Around("com.atguigu.pointcut.MyPointCut.pc()")
    public Object transaction(ProceedingJoinPoint joinPoint) {
        //保证目标方法被执行即可
        Object[] args = joinPoint.getArgs();
        Object result = null;
        try {
            //增强代码->before
            System.out.println("开始事务...");
            result = joinPoint.proceed(args);
            System.out.println("结束事务...");
        } catch (Throwable e) {
            System.out.println("事务回滚...");
            throw new RuntimeException(e);
        }
        return null;
    }

}
